package com.pureland.boot.generator;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.NoArgsConstructor;

/**
 * @projectName: pureland_cloud
 * @className: com.pureland.boot.generator.SequenceGenerator
 * @description: 序列号生成器接口
 * @author: tong.li
 * @createTime: 2021/1/6 16:11
 * @version: v1.0
 * @copyright: 版权所有 李彤 © 2020
 */
public interface SequenceGenerator {

    /**
     * 生成时间序列号(经过JMeter压测后，并发量大时不会生成重复序列号)
     * @param prefix 前缀
     * @param keyRule 时间规则
     * @param size 序列号长度
     * @return
     */
    String generateByTime(String prefix, KeyRule  keyRule, int size);

    /**
     * 生成数字序列号
     * @param prefix 前缀
     * @param size  序列号长度
     * @return
     */
    String generateNumber(String prefix, int size);


    @Getter
    @NoArgsConstructor
    @JsonFormat
    enum KeyRule {
        /**
         * 年月日时分秒
         */
        YYYY_MM_DD_HH_MM_SS,
        /**
         * 年月日
         */
        YYYY_MM_DD,
        /**
         * 年月
         */
        YYYY_MM,
    }

}
